package ui;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class ClientReaderThread extends Thread{
    private Socket socket;
    private DataInputStream dis;
    private ClientChatFrame win;
    public ClientReaderThread(Socket socket, ClientChatFrame win)
    {
        this.socket = socket;
        this.win = win;
    }

    @Override
    public void run() {
        try {
            // 接收的消息可能有多种类型：1、在线人数更新的数据2、群聊消息3、私聊消息
            // 所以客户端必须声明协议发送消息
            // 先从socket管道中接收客户端发送来的消息类型编号
            dis = new DataInputStream(socket.getInputStream());
            while (true) {
                int type = dis.readInt();
                switch (type) {
                    case 1:
                        // 在线人数更新的数据
                        updateClientOnLineUserList();
                        break;
                    case 2:
                        // 服务端发送来的群聊消息
                        getMsgToWin();
                        // 移动光标
                        win.updateCursor();
                        break;
                    case 3:
                        // 私聊消息
                        break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void getMsgToWin() throws Exception{
        String msg = dis.readUTF();
        win.setMsgToWin(msg);
    }

    private void updateClientOnLineUserList() throws Exception{
        // 1、读取有多少个在线用户
        int count = dis.readInt();
        // 2、循环读取在线用户
        String[] names = new String[count];
        for (int i = 0; i < count; i++) {
            String nickname = dis.readUTF();
            names[i] = nickname;
        }
        // 3、更新到界面右侧展示出来
        win.updateOnLineUsers(names);
    }
}
